#!/bin/bash
 

 
 
function dameNumero { 
	if [ $total -lt 100 ]; then
		if [ $cont -lt 10 ]; then
			number="0$cont"
		else
			number="$cont"
		fi
	elif [ $total -lt 1000 ]; then
		if [ $cont -lt 10 ]; then
			number="00$cont"
		elif [ $cont -lt 100 ]; then
			number="0$cont"
		else
			number="$cont"
		fi
	else
		if [ $cont -lt 10 ]; then
			number="000$cont"
		elif [ $cont -lt 100 ]; then
			number="00$cont"
		elif [ $cont -lt 1000 ]; then
			number="0$cont"
		else
			number="$cont"
		fi
	fi 
}
 
#Aqui parseamos las opciones
qflag=0  # Calidad en porcentaje e intervalo de 0-100
sflag=0  # Tamaño en porcentaje e intervalo de 0-100
nflag=0  # especificar patrón de nombre
 
while getopts 'q:s:n' OPTION
do
  case $OPTION in
  q)	qflag=1
		quality="$OPTARG"
		;;
  s)	sflag=1
		size="$OPTARG"
		;;
  n)	nflag=1
		nameBase="$OPTARG"
		;;
  *)	printf "Usage: photo2wp.sh [-q <quality>] [-s <size>] [-n <name>]" >&2
		exit 2
		;;
  esac
done
 
#Si no nos dieron quality asume el 100
if [ $qflag -ne 1 ]; then
	quality=100
fi
 
#Si no nos dieron size asume el 100
if [ $sflag -ne 1 ]; then
	size=100
fi
 
 
#Checamos que quality sea valido
if [[ $quality =~ ^[0-9]+$ ]]; then
    if [ $quality -gt 100 -o $quality -lt 0 ]
    then
		echo "El parámetro quality debe se un número entero en el intervalo [0, 100]" >&2
		exit 3
    fi
else 
	echo "El parámetro quality debe se numérico y entero" >&2
    exit 3
fi
 
#Ahora validamos el valor de size
if [[ $size =~ ^[0-9]+$ ]]; then
    if [ $size -gt 100 -o $size -lt 0 ]
    then
		echo "El parámetro size debe se un número entero en el intervalo [0, 100]" >&2
		exit 3
    fi
else 
	echo "El parámetro size debe se numérico y entero" >&2
    exit 3
fi
 
#Contamos cuantas imagenes hay
total=`ls *.[jJ][pP][gG] 2>/dev/null | wc -l`
 
if [ $total -eq 0 ]; then
	echo "No hay imagenes que procesar en esta carpeta"
	exit 1
fi
 
#Calculemos las opciones y avisemos al usuario que vamos a hacer
opciones="-auto-orient"
 
echo "Hay $total fotos"
 
if [ $sflag -eq 1 ]; then
	echo "Se van a escalar a un tamaño de: $size%"
	opciones="$opciones -resize $size%"
fi
 
if [ $qflag -eq 1 ]; then
	echo "Se van a comprimir con una calidad de: $quality%"
	opciones="$opciones -quality $quality%"
fi
 
if [ $nflag -eq 1 ]; then
	echo "Se guardaran con el nombre: $nameBase[XXX].jpg"
fi
 
#Todo correcto empezamos a procesar
cont=0
number=""
output_file=""
images=*.[jJ][pP][gG]
 
#Ciclo principal sobre todas las imagenes de entrada
for input_file in $images
do
	#Calculamos el nombre de la imagen de salida
	cont=`expr $cont + 1`
	dameNumero
	if [ $nflag -eq 1 ]; then
		output_file="$nameBase$number"
	else
		output_file=${input_file%%.*}
	fi
 
	#Realizamos la conversion
	if convert $opciones "$input_file" "$output_file.jpg" 2>/dev/null ; then
		echo "Imagen $cont de $total"
	else
		echo "$input_file no pudo ser procesada..." >&2
	fi
 
done
 
exit 0
